"""
题目10: 字典操作
难度: ★★☆☆☆
类型: 数据结构

要求:
1. 创建一个包含学生信息的字典
2. 添加新的键值对
3. 修改字典中的值
4. 删除字典中的键值对
5. 遍历字典的所有键和值
6. 检查字典中是否存在某个键
7. 获取字典的所有键和值
8. 合并两个字典

提示:
- 使用{}创建字典
- 使用[]访问和修改值
- 使用del删除键值对
- 使用.keys()获取所有键
- 使用.values()获取所有值
- 使用.items()获取所有键值对

示例输出:
学生信息: {'name': '张三', 'age': 20, 'grade': 'A'}
添加后: {'name': '张三', 'age': 20, 'grade': 'A', 'city': '北京'}
修改后: {'name': '张三', 'age': 21, 'grade': 'A', 'city': '北京'}
删除后: {'name': '张三', 'age': 21, 'city': '北京'}
键: name, age, city
值: 张三, 21, 北京
存在name键: True
"""

# 请在下面编写你的代码
# 1. 创建字典
student = {"name": "张三", "age": 20, "grade": "A"}
print(f"学生信息: {student}")

# 2. 添加键值对
student["city"] = "北京"
print(f"添加后: {student}")

# 3. 修改值
student["age"] = 21
print(f"修改后: {student}")

# 4. 删除键值对
del student["grade"]
print(f"删除后: {student}")

# 5. 遍历字典
print("键值对:")
for key, value in student.items():
    print(f"  {key}: {value}")

# 6. 获取所有键和值
keys = list(student.keys())
values = list(student.values())
print(f"键: {', '.join(keys)}")
print(f"值: {', '.join(str(v) for v in values)}")

# 7. 检查键是否存在
print(f"存在name键: {'name' in student}")

# 8. 合并字典
extra_info = {"hobby": "编程", "major": "计算机科学"}
student.update(extra_info)
print(f"合并后: {student}")

# 扩展练习：字典推导式和嵌套字典
print("\n=== 扩展练习 ===")
# 字典推导式
squares = {x: x**2 for x in range(1, 6)}
print(f"平方字典: {squares}")

# 嵌套字典
class_info = {
    "class_name": "Python班",
    "students": [
        {"name": "张三", "age": 20},
        {"name": "李四", "age": 21},
        {"name": "王五", "age": 22}
    ],
    "teacher": {"name": "张老师", "subject": "Python"}
}

print(f"班级信息: {class_info}")
print(f"学生数量: {len(class_info['students'])}")
print(f"教师姓名: {class_info['teacher']['name']}")

# 字典方法
print(f"获取name值: {student.get('name', '未知')}")
print(f"获取不存在的键: {student.get('phone', '未设置')}")
print(f"所有键: {list(student.keys())}")
print(f"所有值: {list(student.values())}") 